Computing systems have a finite set of hardware resources available to perform computing tasks. For example, processor throughput, memory capacity and bandwidth are two primary examples of resources that are allocated to specific computing tasks. Additionally, network bandwidth, I/O capacity and bandwidth, and other features can affect the speed at which computing tasks are performed.
In many systems, one or more application programs are assigned to a particular processor for execution. In these systems, application programs are typically each assigned a thread, and each thread is allocated resources (e.g., by allocating a time share or other basis), so that no single thread dominates usage of the resources of that processor. Typically, processor time and memory space are allocated according to a priority basis. When a system administrator or operator wishes to ensure that a particular, high-priority process receives as much of an available needed resource (e.g., memory or processor time) as possible, that individual will typically assign that resource a higher priority.
However, simply adjusting priority of processes has drawbacks. For example, even when a process is assigned a highest-possible priority, other processes are able to interrupt, for example to perform basic service tasks. When an interrupt occurs and another process is given access to processing resources, it is possible that both processes will not be able to coexist in memory. In this case, one or more processes might be paged out to a swap file or other disk memory, which is a time-consuming operation. Therefore, page swapping is preferably kept to a minimum. Ideally, an individual will offload as many other processes to separate computing systems, thereby entirely removing the need for that process to interrupt. Typically, this involves shutting the process down and transferring the application to the separate computing system. However, transferring executable applications between systems may not be desirable, because the executable could be intercepted by a hacker, and modified or stolen while the file is under transmission. In distributed computing system load balancing is achieved by executing multiple processes in parallel by assigning them to different processors with or without processor affinity. However this assignment is within the system, among the processors controlled by the operating system.
Finite computing resources also present a problem when working with virtual computing systems. Virtual computing systems are systems that operate at the application level of a computing system, and typically include an operating system and other software useable for simulating operation of one instruction set architecture and/or operating system on another type of computing system (e.g., for executing applications or other programs written for the instruction set and/or operating system within the virtual environment). However, migrating a virtual computing system from one computing system to another computing system is a compute-intensive task, particularly at runtime. This is because typically a virtual machine is migrated by taking a “snapshot” of the entire virtual machine and exporting that virtual machine to another set of physical computing hardware for execution. This method of migrating virtual machines has drawbacks. This is because, even when moving a virtual computing system, that does not isolate one particular task within the virtual environment for execution on the new computing hardware, because the entire set of processes executing within the virtual operating system will be included in the snapshot. That is, the lowest-level granularity of process that is typically migrated for virtual machines is the virtual environment itself, which represents the complete virtual machine. When attempting to isolate a particular application or program executing within a virtual environment, it is difficult to isolate that task, particularly during runtime, when its current status, resource usage, and operational dependencies are included within the image of the virtual environment. In particular, in cloud computing environments where the virtual machines are more involved and the application response times are very crucial, process swapping and wait times are undesirable.
For these and other reasons, improvements are desirable.